<!DOCTYPE html>

<html lang="en" data-content_root="../">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />

  <title>CMAKE_Swift_COMPILATION_MODE &mdash; CMake 4.1.1 Documentation</title>

    <link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=a2c47e09" />
    <link rel="stylesheet" type="text/css" href="../_static/cmake.css?v=4d06bd55" />
    
    <script src="../_static/documentation_options.js?v=e6a937a4"></script>
    <script src="../_static/doctools.js?v=9bcbadda"></script>
    <script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
    
    <link rel="icon" href="../_static/cmake-favicon.ico"/>
    <link rel="index" title="Index" href="../genindex.html" />
    <link rel="search" title="Search" href="../search.html" />
    <link rel="next" title="CMAKE_Swift_MODULE_DIRECTORY" href="CMAKE_Swift_MODULE_DIRECTORY.html" />
    <link rel="prev" title="CMAKE_STATIC_LIBRARY_SUFFIX" href="CMAKE_STATIC_LIBRARY_SUFFIX.html" />
 

  </head><body>
    <input id="sidebar-check" type="checkbox" />
    <label id="sidebar-overlay" for="sidebar-check"></label>



    <div class="related relbar1" role="navigation" aria-label="Related">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="../genindex.html" title="General Index"
             accesskey="I">index</a></li>
        <li class="right" >
          <a href="CMAKE_Swift_MODULE_DIRECTORY.html" title="CMAKE_Swift_MODULE_DIRECTORY"
             accesskey="N">next</a> |</li>
        <li class="right" >
          <a href="CMAKE_STATIC_LIBRARY_SUFFIX.html" title="CMAKE_STATIC_LIBRARY_SUFFIX"
             accesskey="P">previous</a> |</li>
  <li>
    <label class="sidebar-toggle" for="sidebar-check"></label>
  </li>
  <li class="rootlink">
    <img src="../_static/cmake-logo-16.png" width="16" height="16" alt=""/>
    <a href="https://cmake.org/">CMake 4.1.1</a>
    <span class="reldelim1"> &#187;</span>
  </li>
  <li>
    <a href="../index.html">Documentation</a> &#187;
  </li>

          <li class="nav-item nav-item-1"><a href="../manual/cmake-variables.7.html" accesskey="U">cmake-variables(7)</a> &#187;</li>
        <li class="nav-item nav-item-this"><a href="">CMAKE_Swift_COMPILATION_MODE</a></li> 
      </ul>
    </div>  

    <div class="document">
      <div class="documentwrapper">
        <div class="bodywrapper">
          <div class="body" role="main">
            
  <section id="cmake-swift-compilation-mode">
<span id="variable:CMAKE_Swift_COMPILATION_MODE"></span><h1>CMAKE_Swift_COMPILATION_MODE<a class="headerlink" href="#cmake-swift-compilation-mode" title="Link to this heading">¶</a></h1>
<div class="versionadded">
<p><span class="versionmodified added">Added in version 3.29.</span></p>
</div>
<p>Specify how Swift compiles a target. This variable is used to initialize the
<span class="target" id="index-0-prop_tgt:Swift_COMPILATION_MODE"></span><a class="reference internal" href="../prop_tgt/Swift_COMPILATION_MODE.html#prop_tgt:Swift_COMPILATION_MODE" title="Swift_COMPILATION_MODE"><code class="xref cmake cmake-prop_tgt docutils literal notranslate"><span class="pre">Swift_COMPILATION_MODE</span></code></a> property on targets as they are created.</p>
<p>The allowed values are:</p>
<dl class="simple">
<dt><code class="docutils literal notranslate"><span class="pre">incremental</span></code></dt><dd><p>Compiles each Swift source in the module separately, resulting in better
parallelism in the build. The compiler emits additional information into
the build directory improving rebuild performance when small changes are made
to the source between rebuilds. This is the best option to use while
iterating on changes in a project.</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">wholemodule</span></code></dt><dd><p>Whole-module optimizations are slowest to compile, but results in the most
optimized library. The entire context is loaded into once instance of the
compiler, so there is no parallelism across source files in the module.</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">singlefile</span></code></dt><dd><p>Compiles each source in a Swift modules separately, resulting in better
parallelism. Unlike the <code class="docutils literal notranslate"><span class="pre">incremental</span></code> build mode, no additional information
is emitted by the compiler during the build, so rebuilding after making small
changes to the source file will not run faster. This option should be used
sparingly, preferring <code class="docutils literal notranslate"><span class="pre">incremental</span></code> builds, unless working around a compiler
bug.</p>
</dd>
</dl>
<p>Use <span class="target" id="index-0-manual:cmake-generator-expressions(7)"></span><a class="reference internal" href="../manual/cmake-generator-expressions.7.html#manual:cmake-generator-expressions(7)" title="cmake-generator-expressions(7)"><code class="xref cmake cmake-manual docutils literal notranslate"><span class="pre">generator</span> <span class="pre">expressions</span></code></a> to support
per-configuration specification. For example, the code:</p>
<div class="highlight-cmake notranslate"><div class="highlight"><pre><span></span><span class="nf">set(</span><span class="nb">CMAKE_Swift_COMPILATION_MODE</span>
<span class="w">  </span><span class="s">&quot;$&lt;IF:$&lt;CONFIG:Release&gt;,wholemodule,incremental&gt;&quot;</span><span class="nf">)</span>
</pre></div>
</div>
<p>sets the default Swift compilation mode to wholemodule mode when building a
release configuration and to incremental mode in other configurations.</p>
<p>If this variable is not set then the <span class="target" id="index-1-prop_tgt:Swift_COMPILATION_MODE"></span><a class="reference internal" href="../prop_tgt/Swift_COMPILATION_MODE.html#prop_tgt:Swift_COMPILATION_MODE" title="Swift_COMPILATION_MODE"><code class="xref cmake cmake-prop_tgt docutils literal notranslate"><span class="pre">Swift_COMPILATION_MODE</span></code></a> target
property will not be set automatically. If that property is unset then CMake
uses the default value <code class="docutils literal notranslate"><span class="pre">incremental</span></code> to build the Swift source files.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>This property only has effect when policy <span class="target" id="index-0-policy:CMP0157"></span><a class="reference internal" href="../policy/CMP0157.html#policy:CMP0157" title="CMP0157"><code class="xref cmake cmake-policy docutils literal notranslate"><span class="pre">CMP0157</span></code></a> is set to <code class="docutils literal notranslate"><span class="pre">NEW</span></code>
prior to the first <span class="target" id="index-0-command:project"></span><a class="reference internal" href="../command/project.html#command:project" title="project"><code class="xref cmake cmake-command docutils literal notranslate"><span class="pre">project()</span></code></a> or <span class="target" id="index-0-command:enable_language"></span><a class="reference internal" href="../command/enable_language.html#command:enable_language" title="enable_language"><code class="xref cmake cmake-command docutils literal notranslate"><span class="pre">enable_language()</span></code></a> command
that enables the Swift language.</p>
</div>
</section>


            <div class="clearer"></div>
          </div>
        </div>
      </div>
      <div class="sphinxsidebar" role="navigation" aria-label="Main">
        <div class="sphinxsidebarwrapper">
  <div>
    <h4>Previous topic</h4>
    <p class="topless"><a href="CMAKE_STATIC_LIBRARY_SUFFIX.html"
                          title="previous chapter">CMAKE_STATIC_LIBRARY_SUFFIX</a></p>
  </div>
  <div>
    <h4>Next topic</h4>
    <p class="topless"><a href="CMAKE_Swift_MODULE_DIRECTORY.html"
                          title="next chapter">CMAKE_Swift_MODULE_DIRECTORY</a></p>
  </div>
  <div role="note" aria-label="source link">
    <h3>This Page</h3>
    <ul class="this-page-menu">
      <li><a href="../_sources/variable/CMAKE_Swift_COMPILATION_MODE.rst.txt"
            rel="nofollow">Show Source</a></li>
    </ul>
   </div>
<search id="searchbox" style="display: none" role="search">
  <h3 id="searchlabel">Quick search</h3>
    <div class="searchformwrapper">
    <form class="search" action="../search.html" method="get">
      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
      <input type="submit" value="Go" />
    </form>
    </div>
</search>
<script>document.getElementById('searchbox').style.display = "block"</script>
        </div>
      </div>
      <div class="clearer"></div>
    </div>
    <div class="related" role="navigation" aria-label="Related">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="../genindex.html" title="General Index"
             >index</a></li>
        <li class="right" >
          <a href="CMAKE_Swift_MODULE_DIRECTORY.html" title="CMAKE_Swift_MODULE_DIRECTORY"
             >next</a> |</li>
        <li class="right" >
          <a href="CMAKE_STATIC_LIBRARY_SUFFIX.html" title="CMAKE_STATIC_LIBRARY_SUFFIX"
             >previous</a> |</li>
  <li>
    <label class="sidebar-toggle" for="sidebar-check"></label>
  </li>
  <li class="rootlink">
    <img src="../_static/cmake-logo-16.png" width="16" height="16" alt=""/>
    <a href="https://cmake.org/">CMake 4.1.1</a>
    <span class="reldelim1"> &#187;</span>
  </li>
  <li>
    <a href="../index.html">Documentation</a> &#187;
  </li>

          <li class="nav-item nav-item-1"><a href="../manual/cmake-variables.7.html" >cmake-variables(7)</a> &#187;</li>
        <li class="nav-item nav-item-this"><a href="">CMAKE_Swift_COMPILATION_MODE</a></li> 
      </ul>
    </div>

    <div class="footer" role="contentinfo">
    &#169; Copyright 2000-2025 Kitware, Inc. and Contributors.
      Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 8.1.3.
    </div>
<script type="text/javascript">
(function() {
  "use strict";
  const hide = () => document.getElementById("sidebar-check").checked = false;
  addEventListener("keydown", e => (e.key === "Escape") && hide());
  addEventListener("click", e => (e.target.tagName === "A") && hide());
  addEventListener("hashchange", hide)
})();
</script>
  </body>
</html>